#include <bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn = 3005;
int arr[maxn];
int st[maxn];
int top; // 表示栈中元素个数, 同时也是栈顶位置
int n;

void solve(){
	cin >> n;
	for (int i=1;i<=n;i++) {
		cin >> arr[i];
	}
	int ans = 0;
	for (int i=1;i<=n;i++) {
		if (arr[i] > st[top]) {
			// 直接放进去
			st[++top] = arr[i];
		} else {
			// 找到第一个 >= arr[i] 的元素给他替换出去
			int pos = lower_bound(st+1, st+1+top, arr[i]) - st;
			st[pos] = arr[i];
		}
		ans = max(ans, top);
	}
	cout << ans << '\n';
}

signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
